【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~

您所在的位置:网站首页 java 文件操作第三方工具类 【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~

【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~

2023-06-29 22:20| 来源: 网络整理| 查看: 265

Java高级语法详解之系统辅助工具类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 System类常用方法3.2 使用技巧 4️⃣ 应用场景🌾 总结

在这里插入图片描述

1️⃣ 概念

Java的System类是Java标准库中一个重要且常用的类。它被设计用于提供与系统相关的操作和信息访问功能。System类的设计目的是为了让开发者更方便地与底层操作系统进行交互,并提供一些常见而有用的系统级别的功能。

System类是一个包含各种静态方法和字段的系统辅助工具类。它提供了一系列静态方法,用于访问系统属性、执行外部命令、获取系统时间等操作。

System类是Java标准库的一部分,它与底层的操作系统交互通过JNI(Java Native Interface)实现,通过调用本地方法访问底层操作系统的功能。

System类具有以下特征:

类中的方法和字段都是静态的,可以直接通过类名调用;提供了许多与系统环境和资源交互的方法,如获取和设置系统属性、标准输入输出流的访问、执行外部命令等;提供了与垃圾回收器、Java虚拟机等底层操作相关的方法。 2️⃣ 优势和缺点

优点: 提供了统一的接口,方便访问与系统相关的信息和行为;提供了跨平台性,使得编写可移植的Java代码成为可能。

缺点: 过度使用System类的静态方法可能导致代码耦合性增强;类中有些方法在不同的平台上可能表现不一致。

3️⃣ 使用 3.1 System类常用方法

下面表格中列出了System类中的方法和字段,并提供了简要描述。 这些方法和字段允许开发者与底层操作系统进行交互,获取系统属性、执行外部命令、管理输入输出等操作:

类别名称描述方法arraycopy(Object src, int srcPos, Object dest, int destPos, int length)复制数组中的元素到另一个数组currentTimeMillis()返回当前时间的毫秒数exit(int status)退出Java虚拟机,可使用指定的状态码作为程序的结束代码gc()强制运行垃圾回收器getenv(String name)获取指定环境变量的值getProperties()获取当前系统属性的集合。 如获取操作系统版本、文件分隔符等getProperty(String key)根据键名获取系统属性的值getProperty(String key, String defaultValue)根据键名获取系统属性的值,如果没有找到则返回默认值load(String filename)加载本地库loadLibrary(String libname)加载指定名称的本地库nanoTime()返回当前系统时间的纳秒数runFinalization()请求运行已被丢弃对象的 finalize() 方法runFinalizersOnExit(boolean value)在退出程序时运行所有对象的 finalize() 方法setErr(PrintStream err)重新指定标准错误输出流setIn(InputStream in)重新指定标准输入流setOut(PrintStream out)重新指定标准输出流setProperty(String key, String value)设置指定键的系统属性值identityHashCode(Object x)返回给定对象的哈希码字段in标准输入流(InputStream)out标准输出流(PrintStream)err标准错误输出流(PrintStream)

🔍关于exit(int status)方法的参数值问题?

在System类的exit(int status)方法中,可以传递不同的整数值作为参数,每个值都有特定的意义。以下是常用的参数值及其含义:

0:一般表示程序正常终止。通常在没有错误或异常情况下,通过该状态码退出程序。非零值:一般表示程序非正常终止,可能存在某种错误、异常或其他不可预期的情况。具体的非零值可以根据需要进行定义和约定。

注意,除了0以外,非零状态码的具体含义并没有明确规定。在实际应用中,开发者可以根据自身需求自定义和解释这些状态码。通常,非零状态码被用来表示不同的错误类型或异常情况,以便程序的调用方或脚本等能够根据状态码进行后续处理。 尽管非零值可以用于自定义特定意义的状态码,但建议遵循一些常见的惯例和约定,例如使用负数表示特定错误类型,使用正数表示某种成功状态的变体等。 总之,exit(int status)方法的参数可以是任意整数值,但一般而言,0通常表示正常终止,非零值表示非正常终止或错误情况。

下面是一个使用System类的各个方法和字段的Java案例程序:

import java.util.Arrays; public class SystemExample { public static void main(String[] args) { // 方法: arraycopy(Object src, int srcPos, Object dest, int destPos, int length) int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[5]; System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); System.out.println(Arrays.toString(destinationArray)); // 方法: currentTimeMillis() long currentTime = System.currentTimeMillis(); System.out.println(currentTime); // 方法: gc() System.gc(); // 方法: getenv(String name) String javaHome = System.getenv("JAVA_HOME"); System.out.println("JAVA_HOME=" + javaHome); // 方法: getProperties() System.out.println("Properties=" + System.getProperties()); // 方法: getProperty(String key) String osVersion = System.getProperty("os.version"); System.out.println("os.version=" + osVersion); // 方法: getProperty(String key, String defaultValue) String javaVendor = System.getProperty("java.vendor", "Unknown"); System.out.println("java.vendor=" + javaVendor); // 方法: load(String filename) // System.load("mylibrary.dll"); // 方法: loadLibrary(String libname) // System.loadLibrary("mylibrary"); // 方法: nanoTime() long startTime = System.nanoTime(); // code here... long endTime = System.nanoTime(); long executionTime = endTime - startTime; System.out.println("executionTime = " + executionTime); // 方法: runFinalization() System.runFinalization(); // 方法: setErr(PrintStream err) System.setErr(System.err); // 方法: setIn(InputStream in) System.setIn(System.in); // 方法: setOut(PrintStream out) System.setOut(System.out); // 方法: setProperty(String key, String value) System.setProperty("my.property", "myValue"); System.out.println("my.property=" + System.getProperty("my.property")); // 方法: identityHashCode(Object x) Object myObject = new Object(); int objectHashCode = System.identityHashCode(myObject); System.out.println("objectHashCode = " + objectHashCode); // 字段: in try { int read = System.in.read(); System.out.println(read); } catch (Exception e) { e.printStackTrace(); } // 字段: out System.out.println("Hello, World!"); // 字段: err System.err.println("Error occurred!"); // 方法: exit(int status) System.exit(0); System.out.println("JVM已经停止运行,这里的代码执行不到..."); } }

程序运行结果如下:

[1, 2, 3, 4, 5] 1687942503061 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162 Properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_202\jre\bin, java.vm.version=25.202-b08, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=C:\Users\86182\IdeaProjects\untitled15, java.runtime.version=1.8.0_202-b08, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_202\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\86182\AppData\Local\Temp\, line.separator= , java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_202\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\MyApp\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;c:\windows\system32;c:\windows;c:\windows\System32\Wbem;c:\windows\System32\WindowsPowerShell\v1.0\;c:\windows\System32\OpenSSH\;C:\Program Files\Java\jdk1.8.0_162\bin;C:\Program Files\Java\jdk1.8.0_162\jre\bin;D:\MyApp\TortoiseSVN\bin;*:\MyApp\dmdbms\bin;D:\MyApp\mysql-5.6.47-winx64\bin;C:\Program Files\Git\cmd;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\HP\Common\HPDestPlgIn\;D:\MyApp\NetSarang\;D:\MyApp\Python\Python311\Scripts\;D:\MyApp\Python\Python311\;C:\Users\86182\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\HP\Common\HPDestPlgIn\;D:\MyApp\JetBrains\IntelliJ IDEA 2021.2.3\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\86182, user.timezone=, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=C:\Program Files\Java\jdk1.8.0_202\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar;C:\Users\86182\IdeaProjects\untitled15\out\production\untitled15;D:\MyApp\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar, user.name=86182, java.vm.specification.version=1.8, sun.java.command=com.xiaoshan.SystemExample, java.home=C:\Program Files\Java\jdk1.8.0_202\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_202, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_202\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_202\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64} os.version=10.0 java.vendor=Oracle Corporation executionTime = 300 my.property=myValue objectHashCode = 460141958 666 10 Hello, World! Error occurred!

注意当程序运行到第69行int read = System.in.read();时,需要在console控制台输入数据,程序才会再继续往下执行结束。

3.2 使用技巧

System类在使用时存在以下使用技巧以及注意事项:

在使用System类时,应注意避免滥用静态方法,以免导致代码难以维护和测试。推荐将与System类相关的逻辑封装到单独的模块中,以提高代码的可扩展性和可测试性;System类中的方法多用于与底层系统交互,因此需要对每个操作的结果进行适当的检查和异常处理。 4️⃣ 应用场景

System类可以在多种场景下发挥重要作用:

系统属性的获取和配置,如读取和设置环境变量、文件路径、编码等;外部命令的执行和控制,如调用系统命令行工具完成特定任务;监控程序和程序性能优化,通过测量程序运行时间和高效的数组复制等操作。 🌾 总结

System类是Java标准库提供的重要工具类,可用于访问与系统相关的操作、信息和资源。它提供了易于使用且跨平台的接口,使得开发者可以更方便地与底层系统进行交互。

合理并正确地使用System类,可以帮助实现更灵活、高效和可移植的Java应用程序。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3